package ar.com.jendrix.common.persistence.manager;

import java.util.List;

import ar.com.jendrix.common.exception.ApplicationException;
import ar.com.jendrix.common.exception.SystemException;
import ar.com.jendrix.common.persistence.entity.BaseEntity;

public interface EntityDAO<BE extends BaseEntity> {

	/**
	 * 
	 * @param entityID
	 * @return
	 * @throws SystemException
	 */
	public abstract BE get(Long entityId) throws SystemException;

	/**
	 * 
	 * @param entityId
	 * @return
	 * @throws SystemException
	 */
	public abstract BE getFull(Long entityId) throws SystemException;

	/**
	 * 
	 * @return
	 * @throws SystemException
	 */
	public abstract List<BE> getList() throws SystemException;

	/**
	 * 
	 * @param entity
	 * @return
	 * @throws ApplicationException
	 * @throws SystemException
	 */
	public abstract BE save(BE entity) throws ApplicationException, SystemException;

	/**
	 * 
	 * @param entityId
	 * @throws ApplicationException
	 * @throws SystemException
	 */
	public abstract void delete(Long entityId) throws ApplicationException, SystemException;

	/**
	 * 
	 * @param entityId
	 * @throws ApplicationException
	 * @throws SystemException
	 */
	public void logicalDelete(Long entityId) throws ApplicationException, SystemException;
}